package cn.iocoder.yudao.module.ems.service.store;

import java.util.*;
import javax.validation.*;

import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.ems.controller.admin.store.vo.*;
import cn.iocoder.yudao.module.ems.dal.dataobject.store.StoreDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 仓库 Service 接口
 *
 * @author 左Dason
 */
public interface StoreService {

    /**
     * 创建仓库
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createStore(@Valid StoreCreateReqVO createReqVO);

    /**
     * 更新仓库
     *
     * @param updateReqVO 更新信息
     */
    void updateStore(@Valid StoreUpdateReqVO updateReqVO);

    /**
     * 删除仓库
     *
     * @param id 编号
     */
    void deleteStore(Long id);

    /**
     * 获得仓库
     *
     * @param id 编号
     * @return 仓库
     */
    StoreDO getStore(Long id);

    /**
     * 获得仓库列表
     *
     * @param ids 编号
     * @return 仓库列表
     */
    List<StoreDO> getStoreList(Collection<Long> ids);

    /**
     * 获得仓库分页
     *
     * @param pageReqVO 分页查询
     * @return 仓库分页
     */
    PageResult<StoreDO> getStorePage(StorePageReqVO pageReqVO);

    List<StoreDO> getSimpleStores(StoreListReqVO reqVO);

    /**
     * 获得仓库列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 仓库列表
     */
//    List<StoreDO> getStoreList(StoreExportReqVO exportReqVO);

    /**
     * 获得指定编号的部门列表
     *
     * @param ids 部门编号数组
     * @return 部门列表
     */
    List<StoreDO> getSimpleStores(Collection<Long> ids);

    /**
     * 获得指定编号的仓库 Map
     *
     * @param ids 仓库编号数组
     * @return 仓库 Map
     */
    default Map<Long, StoreDO> getStoreMap(Collection<Long> ids) {
        if (CollUtil.isEmpty(ids)) {
            return Collections.emptyMap();
        }
        List<StoreDO> list = getSimpleStores(ids);
        return CollectionUtils.convertMap(list, StoreDO::getId);
    }

}
